﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlClient;
using Csla.Data;
using Sireass.Dal;
using log4net;

namespace Sireass.DalSql
{
	public class UnidadResponsableDal : IUnidadResponsableDal
	{

		// Create a logger for use in this class
		private static readonly ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);

		private SqlParameter accion = null;
		private string nombreProcedimiento = null;

		public UnidadResponsableDal()
		{
			accion = new SqlParameter("@Accion", System.Data.SqlDbType.SmallInt);
			nombreProcedimiento = "spSireassCatUnidadResponsable";
		}

		public System.Data.IDataReader Fetch()
		{
			using (var ctx = ConnectionManager<SqlConnection>.GetManager("SqlServer"))
			{
				var cm = ctx.Connection.CreateCommand();
				cm.CommandType = System.Data.CommandType.StoredProcedure;
				cm.CommandText = nombreProcedimiento;
				cm.Parameters.AddWithValue("@Accion", AccionDal.AccionSP.CONSULTAR);
				return cm.ExecuteReader();
			}
		}

		public System.Data.IDataReader Fetch(long idUnidadResponsable)
		{
			using (var ctx = ConnectionManager<SqlConnection>.GetManager("SqlServer"))
			{
				var cm = ctx.Connection.CreateCommand();
				cm.CommandType = System.Data.CommandType.StoredProcedure;
				cm.CommandText = nombreProcedimiento;
				//cm.CommandText = "SELECT Id,FirstName,LastName FROM Person WHERE Id=@id";
				cm.Parameters.AddWithValue("@Accion", AccionDal.AccionSP.CONSULTAR);
				cm.Parameters.AddWithValue("@nId_UnidadResponsable", idUnidadResponsable);
				if (log.IsDebugEnabled)
				{
					log.Debug("parametro Accion: " + cm.Parameters[0].ParameterName);
					log.Debug("parametro Accion-Valor: " + cm.Parameters[0].Value);
					log.Debug("parametro nId_UnidadResponsable: " + cm.Parameters[1].ParameterName);
					log.Debug("parametro nId_UnidadResponsable-Valor: " + cm.Parameters[1].Value);
				}
				return cm.ExecuteReader();
			}
		}

		public long Insert(long idEscuela, long idCargo, string unidadResponsable,
			string ubicacion, string correo, string telefono, bool habilitado)
		{
			using (var ctx = ConnectionManager<SqlConnection>.GetManager("SqlServer"))
			{
				using (var cm = ctx.Connection.CreateCommand())
				{
					cm.CommandType = System.Data.CommandType.StoredProcedure;
					cm.CommandText = nombreProcedimiento;
					cm.Parameters.AddWithValue("@Accion", AccionDal.AccionSP.INSERTAR);
					cm.Parameters.AddWithValue("@nId_Escuela", idEscuela);
					cm.Parameters.AddWithValue("@nId_Cargo", idCargo);
					cm.Parameters.AddWithValue("@cUnidadResponsable", unidadResponsable);
					cm.Parameters.AddWithValue("@cUbicacion", ubicacion);
					cm.Parameters.AddWithValue("@cCorreo", correo);
					cm.Parameters.AddWithValue("@cTelefono", telefono);
					cm.Parameters.AddWithValue("@bHabilitado", habilitado);
					SqlParameter paramIdUnidadResponsable = new SqlParameter("@nId_UnidadResponsable", System.Data.SqlDbType.BigInt);
					paramIdUnidadResponsable.Direction = System.Data.ParameterDirection.Output;
					cm.Parameters.Add(paramIdUnidadResponsable);
					Console.Out.WriteLine("parametro Accion: " + cm.Parameters[0].ParameterName);
					Console.Out.WriteLine("parametro Accion-Valor: " + cm.Parameters[0].Value);
					if (log.IsDebugEnabled)
					{
						log.Debug("Insert");
						log.Debug("storedProcedure: " + nombreProcedimiento);
						log.Debug("paramAccion: " + cm.Parameters["@Accion"].Value);
						log.Debug("cUnidadResponsable: " + cm.Parameters["@cUnidadResponsable"].Value);
					}
					cm.ExecuteNonQuery();
					if (log.IsDebugEnabled)
					{
						log.Debug("idUnidadResponsable: " + cm.Parameters["@nId_UnidadResponsable"].Value);
					}
					return Convert.ToInt64(paramIdUnidadResponsable.Value);
				}
			}
		}

		public void Update(long idUnidadResponsable, long idEscuela, long idCargo, string unidadResponsable,
		string ubicacion, string correo, string telefono, bool habilitado)
		{
			using (var ctx = ConnectionManager<SqlConnection>.GetManager("SqlServer"))
			{
				using (var cm = ctx.Connection.CreateCommand())
				{
					cm.CommandType = System.Data.CommandType.StoredProcedure;
					cm.CommandText = nombreProcedimiento;
					cm.Parameters.AddWithValue("@Accion", AccionDal.AccionSP.ACTUALIZAR);
					cm.Parameters.AddWithValue("@nId_UnidadResponsable", idUnidadResponsable);
					cm.Parameters.AddWithValue("@nId_Escuela", idEscuela);
					cm.Parameters.AddWithValue("@nId_Cargo", idCargo);
					cm.Parameters.AddWithValue("@cUnidadResponsable", unidadResponsable);
					cm.Parameters.AddWithValue("@cUbicacion", ubicacion);
					cm.Parameters.AddWithValue("@cCorreo", correo);
					cm.Parameters.AddWithValue("@cTelefono", telefono);
					cm.Parameters.AddWithValue("@bHabilitado", habilitado);
					Console.Out.WriteLine("parametro Accion: " + cm.Parameters[0].ParameterName);
					Console.Out.WriteLine("parametro Accion-Valor: " + cm.Parameters[0].Value);
					if (log.IsDebugEnabled)
					{
						log.Debug("Update");
						log.Debug("storedProcedure: " + nombreProcedimiento);
						log.Debug("paramAccion: " + cm.Parameters["@Accion"].Value);
						log.Debug("idUnidadResponsable: " + cm.Parameters["@nId_UnidadResponsable"].Value);
					}
					var rowsAffected = cm.ExecuteNonQuery();
					if (log.IsDebugEnabled)
					{
						log.Debug("rowsAffected: " + rowsAffected);
					}
					if (rowsAffected <= 0)
						throw new DataNotFoundException("UnidadResponsable");
				}
			}
		}

		public void Delete(long idUnidadResponsable)
		{
			using (var ctx = ConnectionManager<SqlConnection>.GetManager("SqlServer"))
			{
				using (var cm = ctx.Connection.CreateCommand())
				{
					cm.CommandType = System.Data.CommandType.StoredProcedure;
					cm.CommandText = nombreProcedimiento;
					cm.Parameters.AddWithValue("@Accion", AccionDal.AccionSP.ELIMINAR);
					cm.Parameters.AddWithValue("@nId_UnidadResponsable", idUnidadResponsable);
					if (log.IsDebugEnabled)
					{
						log.Debug("Delete");
						log.Debug("storedProcedure: " + nombreProcedimiento);
						log.Debug("paramAccion: " + cm.Parameters["@Accion"].Value);
						log.Debug("idUnidadResponsable: " + cm.Parameters["@nId_UnidadResponsable"].Value);
					}
					var rowsAffected = cm.ExecuteNonQuery();
					if (log.IsDebugEnabled)
					{
						log.Debug("rowsAffected: " + rowsAffected);
					}
					if (rowsAffected <= 0)
						throw new DataNotFoundException("UnidadResponsable");
				}
			}
		}
	}
}
